{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "90307081-8c90-4cc8-b685-449e064c88af",
   "metadata": {},
   "source": [
    "### **XOR问题**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "69e1cf60-57c5-444d-9443-a57c997cc6ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练后的输出:\n",
      "[[0.00671528]\n",
      " [0.97996806]\n",
      " [0.97996806]\n",
      " [0.02695409]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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YIAxefJk9+ulpaVGfHy8cdNNNxk7d+40/vrXvxohISHG7373O/eYf/3rX0ZAQIAxf/58Y9euXcbs2bONoKAgY8eOHd75MnzAU089ZcTGxhqrVq0yDh8+bKxYscIIDw83fvOb37jHcDw6z+rVq41f/OIXxptvvmlIMv72t795vO5L331bamkLAhPOq7i42JBkfPTRR4ZhGEZJSYkRFBRkrFixwj1m9+7dhiQjLy/PMIzG/4isVqvhcDjcY1588UUjMjLSqKmpMQzDMGbOnGkMGTLE4++aNGmSkZOT4/559OjRxr333uv+uaGhwUhKSjJyc3M7/oP6sLKyMmPgwIHG2rVrjauuusodmDgW3vfzn//cGDdu3Hlfd7lcRkJCgvHMM8+4t5WUlBg2m83461//ahiGYezatcuQZHz22WfuMe+8845hsViMo0ePGoZhGL/97W+NHj16uI9R89996aWXun/+j//4D2PChAkef39mZqZx1113fbMP2YVMmDDB+M///E+PbT/60Y+Mm266yTAMjoc3fT0w+dJ335Za2opTcjiv0tJSSVJMTIwkadOmTaqrq1N2drZ7zKBBg5SSkqK8vDxJUl5enoYNG6b4+Hj3mJycHDmdTn3++efuMWfvo3lM8z5qa2u1adMmjzFWq1XZ2dnuMf7i3nvv1YQJE875vjgW3vf3v/9dGRkZ+slPfqJevXppxIgRevnll92vHz58WA6Hw+O7ioqKUmZmpscxiY6OVkZGhntMdna2rFar8vPz3WO+/e1vKzg42D0mJydHe/fu1ZkzZ9xjLnTc/MHYsWO1bt067du3T5K0bds2rV+/Xt/73vckcTzM5EvffVtqaSsCE1rkcrk0ffp0XXnllRo6dKgkyeFwKDg4WNHR0R5j4+Pj5XA43GPO/gXd/Hrzaxca43Q6VVVVpZMnT6qhoaHFMc378AfLli3T5s2blZube85rHAvvO3TokF588UUNHDhQ7777ru655x498MADeuWVVyR99Z1e6LtyOBzq1auXx+uBgYGKiYnpkOPmT8fk0Ucf1Y033qhBgwYpKChII0aM0PTp03XTTTdJ4niYyZe++7bU0laBFzUafuPee+/Vzp07tX79erNL8UuFhYWaNm2a1q5dK7vdbnY5UOP/RGRkZOhXv/qVJGnEiBHauXOnlixZoqlTp5pcnf95/fXX9eqrr+q1117TkCFDtHXrVk2fPl1JSUkcD3QKZphwjvvuu0+rVq3SBx98oD59+ri3JyQkqLa2ViUlJR7ji4qKlJCQ4B7z9Su1mn9ubUxkZKRCQkIUFxengICAFsc076O727Rpk4qLi3XFFVcoMDBQgYGB+uijj7Rw4UIFBgYqPj6eY+FliYmJGjx4sMe2yy67TAUFBZK++k4v9F0lJCSouLjY4/X6+nqdPn26Q46bPx2TRx55xD3LNGzYMN1yyy168MEH3TOyHA/z+NJ335Za2orABDfDMHTffffpb3/7m95//32lpaV5vD5y5EgFBQVp3bp17m179+5VQUGBsrKyJElZWVnasWOHx38Ia9euVWRkpPuXTVZWlsc+msc07yM4OFgjR470GONyubRu3Tr3mO7u2muv1Y4dO7R161b3IyMjQzfddJP7zxwL77ryyivPWWZj37596tu3ryQpLS1NCQkJHt+V0+lUfn6+xzEpKSnRpk2b3GPef/99uVwuZWZmusd8/PHHqqurc49Zu3atLr30UvXo0cM95kLHzR9UVlbKavX8FRYQECCXyyWJ42EmX/ru21JLm11Uizi6tXvuuceIiooyPvzwQ+P48ePuR2VlpXvM3XffbaSkpBjvv/++sXHjRiMrK8vIyspyv958Kft3v/tdY+vWrcaaNWuMnj17tngp+yOPPGLs3r3bWLx4cYuXsttsNmPp0qXGrl27jDvvvNOIjo72uOLL35x9lZxhcCy8bcOGDUZgYKDx1FNPGfv37zdeffVVIzQ01PjLX/7iHvP0008b0dHRxltvvWVs377d+OEPf9jipdQjRoww8vPzjfXr1xsDBw70uJS6pKTEiI+PN2655RZj586dxrJly4zQ0NBzLqUODAw0nn32WWP37t3GvHnzuv1l7F83depUo3fv3u5lBd58800jLi7OmDlzpnsMx6PzlJWVGVu2bDG2bNliSDKef/55Y8uWLcYXX3xhGIZvffdtqaUtCExwk9Ti449//KN7TFVVlfFf//VfRo8ePYzQ0FDj3/7t34zjx4977OfIkSPG9773PSMkJMSIi4szHnroIaOurs5jzAcffGCkp6cbwcHBRr9+/Tz+jmYvvPCCkZKSYgQHBxujR482Pv3008742F3G1wMTx8L7/u///s8YOnSoYbPZjEGDBhkvvfSSx+sul8uYM2eOER8fb9hsNuPaa6819u7d6zHm1KlTxuTJk43w8HAjMjLSuPXWW42ysjKPMdu2bTPGjRtn2Gw2o3fv3sbTTz99Ti2vv/66cckllxjBwcHGkCFDjLfffrvjP7APczqdxrRp04yUlBTDbrcb/fr1M37xi194XILO8eg8H3zwQYu/L6ZOnWoYhm99922ppS0shnHWsqgAAAA4Bz1MAAAArSAwAQAAtILABAAA0AoCEwAAQCsITAAAAK0gMAEAALSCwAQAANAKAhMAv3H11Vdr+vTpZpcBoAti4UoAfuP06dMKCgpSRESEUlNTNX36dAIUgDYJNLsAAPCWmJiYDt9nbW2tgoODO3y/AHwLp+QA+I3mU3JXX321vvjiCz344IOyWCyyWCzuMevXr9e3vvUthYSEKDk5WQ888IAqKircr6empuqJJ57QlClTFBkZqTvvvNOMjwLAywhMAPzOm2++qT59+ujxxx/X8ePHdfz4cUnSwYMHdf311+vHP/6xtm/fruXLl2v9+vW67777PN7/7LPPavjw4dqyZYvmzJljxkcA4GWckgPgd2JiYhQQEKCIiAglJCS4t+fm5uqmm25y9zUNHDhQCxcu1FVXXaUXX3xRdrtdkvSd73xHDz30kBmlAzAJgQkAmmzbtk3bt2/Xq6++6t5mGIZcLpcOHz6syy67TJKUkZFhVokATEJgAoAm5eXluuuuu/TAAw+c81pKSor7z2FhYd4sC4APIDAB8EvBwcFqaGjw2HbFFVdo165dGjBggElVAfBVNH0D8Eupqan6+OOPdfToUZ08eVKS9POf/1yffPKJ7rvvPm3dulX79+/XW2+9dU7TNwD/Q2AC4Jcef/xxHTlyRP3791fPnj0lSZdffrk++ugj7du3T9/61rc0YsQIzZ07V0lJSSZXC8BsrPQNAADQCmaYAAAAWkFgAgAAaAWBCQAAoBUEJgAAgFYQmAAAAFpBYAIAAGgFgQkAAKAVBCYAAIBWEJgAAABaQWACAABoBYEJAACgFQQmAACAVvx/EzEcVvTUpDUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# import numpy as np\n",
    "# import matplotlib.pyplot as plt\n",
    "\n",
    "# # 定义激活函数 sigmoid\n",
    "# def sigmoid(x):\n",
    "#     return 1 / (1 + np.exp(-x))\n",
    "\n",
    "# # sigmoid 函数的导数\n",
    "# def sigmoid_derivative(y):\n",
    "#     return y * (1 - y)\n",
    "\n",
    "# # 输入数据集\n",
    "# X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])\n",
    "# # 输出数据集\n",
    "# y = np.array([[0], [1], [1], [0]])\n",
    "\n",
    "# # 随机初始化权重\n",
    "# np.random.seed(1)\n",
    "# # 输入层到隐藏层的权重\n",
    "# W0 = np.random.random((2, 2))#范围在0和1之间符合均匀分布的随机数 \n",
    "# # b1 = np.random.random((1,2))\n",
    "# # 隐藏层到输出层的权重\n",
    "# W1 = np.random.random((2, 1))\n",
    "# # b2 = np.random.random((1,1))\n",
    "# #原先的初始化不能够很好的预测\n",
    "# # syn0 = 2 * np.random.random((2, 2)) - 1#范围在-1到1之间的符合均匀分布的随机数\n",
    "# # # 隐藏层到输出层的权重\n",
    "# # syn1 = 2 * np.random.random((2, 1)) - 1\n",
    "\n",
    "# xlabels = []\n",
    "# Ls = []\n",
    "# # 训练网络\n",
    "# for iter in range(100000):\n",
    "#     # 前向传播\n",
    "#     l0 = X\n",
    "#     l1 = sigmoid(np.dot(l0, W0))\n",
    "#     l2 = sigmoid(np.dot(l1, W1))\n",
    "\n",
    "#     # 计算误差\n",
    "#     L = sum((y - l2)**2)/len(y)\n",
    "#     # print(\"iteration:\",iter,\"loss:\",L)\n",
    "#     #gd\n",
    "#     alpha=1\n",
    "#     l2_delta = l2-y\n",
    "#     l2_delta = l2_delta*sigmoid_derivative(l2)\n",
    "#     l1_error = l2_delta.dot(W1.T)\n",
    "#     l1_delta = l1_error*sigmoid_derivative(l1)\n",
    "#     W0 -= alpha*X.T.dot(l1_delta)\n",
    "#     W1 -= alpha*l1.T.dot(l2_delta)\n",
    "#     if (iter+1)%10000 == 0:\n",
    "#         xlabels.extend([iter+1])\n",
    "#         Ls.extend([L[0]])\n",
    "\n",
    "\n",
    "# print(\"训练后的输出:\")\n",
    "# print(l2)\n",
    "# # plt.plot(range(len(xlabels)),Ls)\n",
    "# plt.plot(xlabels,Ls)\n",
    "# plt.xlabel('iter')\n",
    "# plt.ylabel('loss')\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "a448f4d7-1c60-4515-9928-af4eb9892af9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# import numpy as np\n",
    "# from scipy.stats import norm\n",
    "# import matplotlib.pyplot as plt\n",
    "\n",
    "# # 定义正态分布的参数\n",
    "# mu = 0  # 均值\n",
    "# sigma = 1  # 标准差\n",
    "\n",
    "# # 生成 x 值，在 -5 到 5 之间均匀取 1000 个点\n",
    "# x = np.linspace(-5, 5, 1000)\n",
    "\n",
    "# # 计算对应的 y 值，使用正态分布的概率密度函数\n",
    "# y = norm.pdf(x, mu, sigma)\n",
    "\n",
    "# plt.plot(x,y)\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d647cc5-e157-4fec-9ea0-bcb28ba21730",
   "metadata": {},
   "source": [
    "### **蒙特卡洛模拟**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f0c24401-7b8f-4d64-9e90-9077ded29956",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import random\n",
    "\n",
    "def monte_carlo_simulation_sin(n=500):\n",
    "    ns = 0\n",
    "    for _ in range(n):\n",
    "        x_range = (0,math.pi)\n",
    "        y_range = (0,1)\n",
    "        x = random.uniform(*x_range)\n",
    "        y = random.uniform(*y_range)\n",
    "        if y>math.sin(x):continue\n",
    "        ns += 1\n",
    "    return ns/n*math.pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e755c0d6-7e4c-4649-8aea-006338e6c649",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.8849555921538759"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "monte_carlo_simulation_sin()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e73b2069-d04f-4314-ba2d-cc3e0f2fb9ee",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.9603538158400309"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "monte_carlo_simulation_sin(1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a922fe74-8e12-454d-b392-42a6dd9c06bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.9977387684177494"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "monte_carlo_simulation_sin(10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "22fc538d-f0f1-41d5-99af-df8b57f33b66",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.9998122195691188"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "monte_carlo_simulation_sin(100000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3d610898-efb6-447c-bbb3-e0170b74017e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
